# 当系统的功能不能满足我们需求的时候就要重写

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework import serializers
from django.contrib.auth import authenticate
from django.utils.translation import gettext_lazy as _

class MeiduoTokenSerializer(TokenObtainPairSerializer):
    """
    自定义Token序列化器，用于处理登录请求并生成JWT token
    继承自TokenObtainPairSerializer，添加了自定义的验证逻辑和响应格式
    """

    def validate(self, attrs):
        """
        验证用户凭据并生成token
        :param attrs: 包含用户名和密码的字典
        :return: 包含token和用户信息的字典
        """
        # 先调用父类的validate方法，进行基本认证
        data = super().validate(attrs)

        # 检查用户是否是员工（管理员）
        print(f"用户 {self.user.username} 的 is_staff 值: {self.user.is_staff} (类型: {type(self.user.is_staff)})")
        # 注释掉管理员检查，允许所有活跃用户登录
        # 处理is_staff可能是整数的情况
        is_staff = bool(self.user.is_staff) if isinstance(self.user.is_staff, (int, str)) else self.user.is_staff
        if not is_staff:
            msg = _('User account is disabled.')
            raise serializers.ValidationError(msg)

        # 检查账户是否活跃
        print(f"用户 {self.user.username} 的 is_active 值: {self.user.is_active} (类型: {type(self.user.is_active)})")
        # 处理is_active可能是整数的情况
        is_active = bool(self.user.is_active) if isinstance(self.user.is_active, (int, str)) else self.user.is_active
        if not is_active:
            msg = _('User account is disabled.')
            raise serializers.ValidationError(msg)

        # 返回自定义响应格式
        return {
            'token': data['access'],  # 使用access token作为主token
            'username': self.user.username,
            'id': self.user.id
        }

class MeiduoObtainJSONWebToken(TokenObtainPairView):
    """
    自定义JWT视图，用于处理登录请求
    继承自TokenObtainPairView，使用自定义的序列化器
    """
    serializer_class = MeiduoTokenSerializer

# 创建视图实例，用于URL配置
meiduo_token = MeiduoObtainJSONWebToken.as_view()
